Spliterator এবং Parallel Streams Java 8 থেকে Java.util প্যাকেজে অন্তর্ভুক্ত করা হয়েছে এবং তারা parallelism এবং concurrency এর ধারণাগুলিকে আরও উন্নত করে। Spliterator একটি নতুন ইন্টারফেস যা stream এর উপাদানগুলিকে বিভক্ত করে এবং তারপরে parallel প্রসেসিংয়ের জন্য parallel streams এর সাথে কাজ করে। এই ধারণাগুলি কার্যকরীভাবে বৃহৎ ডেটাসেটের উপর দ্রুত কাজ করার জন্য ব্যবহার করা হয়।
এখানে আমরা Spliterator এবং Parallel Streams এর ব্যবহার এবং তাদের একত্রে কাজ করার উপায় নিয়ে আলোচনা করব।
1. Spliterator Interface
Spliterator (যার পূর্ণরূপ splitable iterator) হলো Java 8-এ একটি নতুন ইন্টারফেস, যা stream এ উপাদানগুলির ওপর parallel iteration চালানোর জন্য ব্যবহৃত হয়। এটি একটি iterator এর মত কাজ করে, কিন্তু এটি splitting (ভাগ করা) ক্ষমতা রাখে যা একটি ডেটাসেটের উপাদানগুলোকে একাধিক অংশে ভাগ করে, যাতে সেই উপাদানগুলোকে parallel processing করা যায়।
Spliterator Interface এর বৈশিষ্ট্য:
- Splitting: এটি ডেটা উপাদানগুলিকে split (ভাগ) করতে পারে এবং প্রক্রিয়াকরণে অংশ নিতে পারে।
- Traversal: এটি সাধারণ iterator এর মত কাজ করে এবং উপাদানগুলির মাধ্যমে প্রবাহিত হতে পারে।
- Parallel Processing: এটি parallel streams এর সঙ্গে ব্যবহার করে ডেটা দ্রুত প্রক্রিয়াকরণ করতে সাহায্য করে।
- Characteristics: এটি ডেটার বিভিন্ন বৈশিষ্ট্য যেমন distinct, ordered, sorted, concurrent ইত্যাদি শনাক্ত করতে সাহায্য করে।
Spliterator এর উদাহরণ:
import java.util.ArrayList;
import java.util.List;
import java.util.Spliterator;
public class SpliteratorExample {
public static void main(String[] args) {
// একটি List তৈরি করা
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.add("JavaScript");
// Spliterator তৈরি করা
Spliterator<String> spliterator = list.spliterator();
// Spliterator এর মাধ্যমে List উপাদান ইটারেট করা
System.out.println("Using Spliterator:");
spliterator.forEachRemaining(System.out::println);
}
}
Output:
Using Spliterator:
Java
Python
C++
JavaScript
ব্যাখ্যা:
spliterator.forEachRemaining()মেথডটি List এর সমস্ত উপাদানগুলি প্রিন্ট করেছে। এটি একটি সাধারণ spliterator এর মাধ্যমে পুরো তালিকাটি একটি একক থ্রেডে ইটারেট করেছে।
2. Parallel Streams
Parallel Streams হল Java 8 এর একটি বৈশিষ্ট্য যা stream এর উপাদানগুলিকে parallel প্রসেসিং এর মাধ্যমে দ্রুত প্রক্রিয়াকরণ করতে সহায়তা করে। Parallel streams সিস্টেমের multi-core processors এর সুবিধা নিয়ে থাকে, যা ডেটার প্রক্রিয়াকরণকে দ্রুত করে তোলে।
Parallel Streams এর বৈশিষ্ট্য:
- Multi-core Processors: এটি multi-core processors এর সুবিধা নিয়ে কাজ করে, যার ফলে একাধিক কাজ একসাথে (parallel) করা সম্ভব হয়।
- Speed Improvement: এতে খুব বড় ডেটাসেটের প্রক্রিয়াকরণ অনেক দ্রুত হয়।
- Declarative Approach: Parallel Streams এর ব্যবহার প্রোগ্রামারকে declarative ভাবে parallelism চালানোর ক্ষমতা দেয়।
Parallel Streams এর উদাহরণ:
import java.util.Arrays;
import java.util.List;
public class ParallelStreamExample {
public static void main(String[] args) {
// একটি List তৈরি করা
List<String> list = Arrays.asList("Java", "Python", "C++", "JavaScript");
// Parallel Stream ব্যবহার করে List উপাদান প্রিন্ট করা
System.out.println("Using Parallel Stream:");
list.parallelStream().forEach(System.out::println);
}
}
Output:
Using Parallel Stream:
JavaScript
C++
Python
Java
ব্যাখ্যা:
parallelStream()মেথড ব্যবহার করে তালিকার উপাদানগুলোকে parallelভাবে প্রিন্ট করা হয়েছে। উপাদানগুলির অর্ডার পরিবর্তিত হতে পারে কারণ এটি একাধিক থ্রেডে কাজ করছে।
3. Integration of Spliterator and Parallel Streams
Spliterator এবং Parallel Streams একসাথে কাজ করতে পারে, কারণ Spliterator ডেটাসেটের উপাদানগুলিকে ভাগ করে দেয় এবং তারপর parallel stream সেই উপাদানগুলোকে multi-core প্রসেসরে প্রসেস করতে সক্ষম হয়।
Spliterator এবং Parallel Stream এর একত্রে ব্যবহার উদাহরণ:
import java.util.ArrayList;
import java.util.List;
import java.util.Spliterator;
public class ParallelStreamWithSpliteratorExample {
public static void main(String[] args) {
// একটি List তৈরি করা
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.add("JavaScript");
// Spliterator ব্যবহার করে parallelStream তৈরি করা
Spliterator<String> spliterator = list.spliterator();
list.parallelStream().spliterator().forEachRemaining(System.out::println);
}
}
Output (sample):
C++
Java
JavaScript
Python
ব্যাখ্যা:
- এখানে Spliterator একটি ডেটাসেটের উপাদানগুলোকে বিভক্ত (split) করেছে এবং
parallelStream()ব্যবহার করে এগুলোর parallel প্রক্রিয়াকরণ সম্পন্ন করা হয়েছে। - parallelStream ডেটাকে একাধিক থ্রেডে ভাগ করে দ্রুত প্রক্রিয়াকরণ করেছে, যার ফলে উপাদানগুলির প্রিন্ট অর্ডার পরিবর্তিত হতে পারে।
4. Parallelism এর সুবিধা
- Speed: Parallel processing ব্যবহার করলে একাধিক কোরে কাজ হতে পারে, যার ফলে সময়ের অনেক সাশ্রয় হয়।
- Large Datasets: খুব বড় ডেটাসেটের জন্য parallel streams কার্যকরী, কারণ এতে ডেটা দ্রুত প্রক্রিয়াকরণ হয়।
- Simplified Code: Parallelism চালানো খুবই সহজ, কারণ Java Streams এবং Spliterator এর মাধ্যমে declarative ভাবে parallel execution করা যায়।
- Spliterator এবং Parallel Streams একত্রে কাজ করার মাধ্যমে আপনি সহজে ডেটাসেটের parallel iteration এবং parallel processing করতে পারবেন। Spliterator ডেটাকে ভাগ করে এবং parallel streams সেই উপাদানগুলিকে multi-core processors-এ প্রসেস করে দ্রুত প্রক্রিয়াকরণ নিশ্চিত করে।
- Parallel streams ব্যবহার করার জন্য Spliterator এবং Stream API এর সঠিক বোঝাপড়া প্রয়োজন, যেগুলি concurrency এবং parallelism এ কাজ করার জন্য আধুনিক ও কার্যকরী পদ্ধতি প্রদান করে।
Read more